Sesión 3

Curso: Fundamentos R para Ciencia de Datos en Salud


Percy Soto-Becerra, M.D., M.Sc(c)

DIS – IETSI, EsSalud

2024-03-23

  https://github.com/psotob91

Visualización de datos

Agenda

  1. Visualización de datos

  2. Código paso a paso

  3. Estéticas

  4. Datos ‘tidy’

Visualización de datos


“The simple graph has brought more information to the data analyst’s mind than any other device.” — John Tukey

  • La visualización de datos es la creación y el estudio de la representación visual de los datos.

  • Muchas herramientas para visualizar datos, R es una de ellas.

  • Muchos enfoques/sistemas dentro de R para hacer visualizaciones de datos

    • {ggplot2} es uno de ellos, y eso es lo que vamos a usar

Gramática de gráficos


 

  • Una gramática de gráficos es una herramienta que nos permite describir de manera concisa los componentes de un gráfico.

  • Es un lenguaje que permite dibujar un gráfico con palabras sencillas.

  • Uno puede describir el proceso de dibujar el gráfico con sus propias palabras y estas convertirse en gráfico.

{ggplot2} es un paquete de {tidyverse}.



  • {ggplot2} es el paquete de visualización de datos de tidyverse.

  • gg en {ggplot2} significa Gramática de gráficos.

  • Inspirado en el libro Grammar of Graphics de Leland Wilkinson

Evolución de los gráficos estadisticos


Primeros pasos con {ggplot2}


  • Data disponible en paquete {dslabs}.
library(dslabs)
data(gapminder, package = "dslabs") 

  • Veamos los datos:
  • Veamos el detalle
?gapminder

  • En algunos casos, trabajaremos con los datos del año 2000:
gapminder2000 <- gapminder %>% 
  filter(year == 2000)
  • En algunos casos, trabajaremos con los datos del año 1980 y 2000:
gapminder1980_2000 <- gapminder %>% 
  filter(year %in% c(1980, 2000))

Aspectos básicos de {ggplot2}.


  • Estructura de código para generar gráficos en {ggplot2}
ggplot(data = [dataset], 
       mapping = aes(x = [x_variable], 
                     y = [y_variable])) +
   geom_xxx() +
   other options

Componentes de {ggplot2}.


Código paso a paso

Agenda

  1. Visualización de datos

  2. Código paso a paso

  3. Estéticas

  4. Datos ‘tidy’

Pasos para un gráfico {ggplot2}


Inicia con el data.frame gapminder

ggplot(data = gapminder)

Inicia con el data.frame gapminder, mapea year a x

ggplot(data = gapminder, 
       mapping = aes(x = year))

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy))

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes”

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes” y agrega un titulo para la fuente de datos

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data")

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y. Representa cada información con un punto. Mapea continent al color de los puntos. Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”. Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente. Etiqueta la leyenda como “Continentes” y agrega un titulo para la fuente de datos. Finalmente, usa una escala de colores discreta que esté diseñada para preservar la visualización de personas con formas comunes discapacidad visual para los colores

ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

En resumen


ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "Esperanza de vida a lo largo del tiempo", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Año", y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

Inicia con el data.frame gapminder, mapea year a x y mapea life_expectancy a y.

Representa cada información con un punto.

Mapea continent al color de los puntos.

Titula el gráfico como “Esperanza de vida a lo largo del tiempo” y agrega el subtitulo “Datos para Africa, Americas, Asia, Europa y Oceania”.

Etiqueta los ejes x e y como “Año” y “Esperanza de Vida”, respectivamente.

Etiqueta la leyenda como “Continentes” y agrega un titulo para la fuente de datos.

Finalmente, usa una escala de colores discreta que esté diseñada para preservar la visualización de personas con formas comunes discapacidad visual para los colores.

Nombre de argumentos


Se puede omitir los nombres de los dos primeros argumentos cuando construimos gráficos con {ggplot2}.

ggplot(data = gapminder, 
       mapping = aes(x = gdp, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

ggplot(gapminder, 
       aes(x = gdp, 
           y = life_expectancy, 
           colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

Transformar variables para mejorar visualización


Se puede realizar transformaciones sobre la marcha de las variables en los gráficos de {ggplot2}.

ggplot(data = gapminder2000, 
       mapping = aes(x = gdp, 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "PBI y esperanza de vida", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Producto Bruto Interno", 
       y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), #< Ponemos log()
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  labs(title = "PBI y esperanza de vida", 
       subtitle = "Datos para Africa, Americas, Asia, Europa y Oceania", 
       x = "Logaritmo de Producto Bruto Interno", #< Editamos nombre
       y = "Esperanza de Vida", 
       colour = "Continentes", 
       caption = "Fuente: Gapminder data") + 
  scale_colour_viridis_d()

Nuestro turno


 

  • Descargue la carpeta comaprtida denominada taller02.

  • Abra el proyecto taller02.Rproj.

  • Abra el archivo quarto taller02.qmd.

  • Renderice el archivo quarto taller02.qmd. Abra el archivo taller02.html generado.

  • Desarrolle la PRIMERA PARTE del taller. Al final, renderice el archivo.

10:00

Estéticas

Agenda

  1. Visualización de datos

  2. Código paso a paso

  3. Estéticas

  4. Datos ‘tidy’

Opciones de estéticas


 

Las características comunmente usadas en los gráficos que pueden ser mapeadas a variables específicas en los datos:

  • color

  • forma

  • tamaño

  • alfa (transparencia)

Color


ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

Forma


  • Forma mapeada a variable adicional
ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = region)) + 
  geom_point() + 
  scale_colour_viridis_d()

Forma


  • Forma mapeada a la misma variable
ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp),  
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point() + 
  scale_colour_viridis_d()

Tamaño


ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp),  
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent, 
                     size = population)) + 
  geom_point() + 
  scale_colour_viridis_d()

Alfa


ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent, 
                     size = population, 
                     alpha = population)) + 
  geom_point() + 
  scale_colour_viridis_d()

Mapeo versus Configuración


Mapeo

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent, 
                     size = population, 
                     alpha = population)) + 
  geom_point() + 
  scale_colour_viridis_d()

Configuración

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp),  
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(
    size = 2, 
    alpha = 0.5) + 
  scale_colour_viridis_d()

Mapeo vs. Configuración


  • Mapeo: Determina el tamaño, alfa, etc. de los puntos basados en el valor de un variable en los datos:

    • Conocido en inglés como mapping.

    • Se configura como: aes()

  • Configuración: Determina el tamaño, alfa, etc. de los puntos SIN basarse en el valor de un variable en los datos:

    • Conocido en inglés como setting.

    • Se configura como: geom_* (en este caso fue geom_point, pero hay otras geometrías más)

Temas pre-definidos de {ggplot2}.


 

  • {ggplot2} ofrece una serie de temas predinidos.

  • Un tema predefinido es una configuración pre-definida de componentes no dependientes de los datos (títulos, etiquetas, fuentes, fondo, grilas, leyendas, etc.) que pueden ser usados para darle un aspecto consistente a los gráficos.

  • Más info sobre los temas completas pre-definidos se pueden encontra en el siguiente enlace: Ver aquí.

  • Uno también puede personalizar sus propios temas: Ver aquí.

Temas completos


  • theme_gray (por defecto)

  • theme_bw()

  • theme_linedraw()

  • theme_light()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_gray()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_bw()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_linedraw()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_light()

Temas completos (parte 2)


  • theme_dark()

  • theme_minimal()

  • theme_classic()

  • theme_void()

  • theme_test()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_dark()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_minimal()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_classic()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_void()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy, 
                     colour = continent, 
                     shape = continent)) + 
  geom_point(size = 2, alpha = 0.5) + 
  scale_colour_viridis_d() + 
  theme_test()

Facetado


  • Se puede dividir la imagen en varias subimágenes de acuerdo a alguna otra condición.

  • Muy útil cuando se tienen grandes de datos y es de interés mostrar sus relaciones con varias variables.

  • Hay dos tipos de facetado:

    • facet_grid

    • facet_wrap

Facetado


ggplot(data = gapminder, 
       mapping = aes(x = year, 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_grid(continent ~ .) + 
  scale_colour_viridis_d() + 
  theme_bw()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_grid(. ~ continent) + 
  scale_colour_viridis_d() + 
  theme_bw()

ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_wrap(continent ~ . ) + 
  scale_colour_viridis_d() + 
  theme_bw()
ggplot(data = gapminder2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_wrap(. ~ continent) + 
  scale_colour_viridis_d() + 
  theme_bw()

ggplot(data = gapminder1980_2000, 
       mapping = aes(x = log(gdp), 
                     y = life_expectancy)) + 
  geom_point() + 
  facet_grid(year ~ continent) + 
  scale_colour_viridis_d() + 
  theme_bw()

Hagamos una pausa


Tomemos un descanso de 5 minutos

Estire las piernas

Deje de ver las pantallas

… cualquier , las del celular también.

05:00

Datos ‘tidy’

Agenda

  1. Visualización de datos

  2. Código paso a paso

  3. Estéticas

  4. Datos ‘tidy’

Datos ‘tidy’




Características de los datos ordenados o ‘tidy’

  • Cada variable forma un columna.
  • Cada observación forma una fila.
  • Cada tipo de unidad observacional forma una tabla.

Características de los datos desordenados o ‘untidy’

!@#$%^&*()

Gramática de manejo de datos


Al igual que {ggplot}, el paquete {dplyr}, también de {tidyverse}, ofrece toda una gramática llena de funciones que actúan como verbos para manipular data.frames.

  • select: extrae columnas usando nombres
  • arrange: reordena filas
  • slice: extrae filas usando índices
  • filter: extrae filas que coincidan con criterios lógicos
  • distinct: filtra por filas únicas
  • mutate: agrega nuevas variables
  • summarise: reduce variables a valores
  • group_by: para operacionesa agrupadas
  • … (mucho más)

Reglas de las funciones de {dplyr}



  • El primer argumento siempre es el data frame.

  • Los argumentos subsecuentes dicen qué hacer con el data frame.

  • Siempre retorna un data frame.

  • No altera el data frame original.

Ejemplo de función {dplyr} en acción: seleccionar columna


 

Ver solamente country (países):

select(gapminder, country)
# A tibble: 10,545 × 1
   country            
   <fct>              
 1 Albania            
 2 Algeria            
 3 Angola             
 4 Antigua and Barbuda
 5 Argentina          
 6 Armenia            
 7 Aruba              
 8 Australia          
 9 Austria            
10 Azerbaijan         
# ℹ 10,535 more rows

Reglas de las funciones de {dplyr} en acción


select(
  gapminder, 
  country
)
  • Inicia con la función (un verbo): select()

Reglas de las funciones de {dplyr} en acción


select(
  gapminder, 
  country
)
  • Inicia con la función (un verbo): select()

  • Primer argumento: data frame con el que trabajaremos, gapminder

Reglas de las funciones de {dplyr} en acción


select(
  gapminder, 
  country
)
  • Inicia con la función (un verbo): select()

  • Primer argumento: data frame con el que trabajaremos, gapminder

  • Segundo argumento: variable que queremos seleccionar, country

Reglas de las funciones de {dplyr} en acción


select(
  gapminder, 
  country
)
# A tibble: 10,545 × 1
   country            
   <fct>              
 1 Albania            
 2 Algeria            
 3 Angola             
 4 Antigua and Barbuda
 5 Argentina          
 6 Armenia            
 7 Aruba              
 8 Australia          
 9 Austria            
10 Azerbaijan         
# ℹ 10,535 more rows
  • Inicia con la función (un verbo): select()

  • Primer argumento: data frame con el que trabajaremos, gapminder

  • Segundo argumento: variable que queremos seleccionar, country

  • Resultado: data frame con 10545 filas y 1 columna

Entra data frame / tibble, sale data frame / tiblble


Las funciones de dplyr siempre esperan un data frame y siempre generan un data frame.

  • Entra:
class(gapminder)
[1] "tbl_df"     "tbl"        "data.frame"
  • Sale:
select(gapminder, continent) %>% 
  class()
[1] "tbl_df"     "tbl"        "data.frame"

Hagamos una pausa


Tomemos un descanso de 5 minutos

Estire las piernas

Deje de ver las pantallas

… cualquier , las del celular también.

05:00

¡Gracias!
¿Preguntas?




@psotob91

https://github.com/psotob91

percys1991@gmail.com